package praktikum3;

public interface IKundenServices {

	/**
	 * Systemoperation: Es wird ein Stammkunden gesucht und wenn genau einer den Parametern enspricht, wird seine ID zuruckgegeben
	 * Felder die Null oder ein Leerer string sind werden in der Suche als belibig gewertet
	 * @param anrede Aktueller Wert des Feldes Anrede
	 * @param nameVor Aktueller Wert des Feldes Vornahme
	 * @param nameNach Aktueller Wert des Feldes Nachname
	 * @param adresse Aktueller Wert des Feldes Adresse
	 * @param email Aktueller Wert des Feldes E-Mail Adresse
	 * @return integer Die Id des Kunden wenn einer gefunden wurde wenn keiner gefunden wurde eine Negative Zahl
	 * @throw AnredeNotValidException Wenn Anrede etwas anderes ist als Herr oder Frau order Lehr oder Null ist
	 * @throw VornameNotValidException Wenn der Vornahme nicht nur aus Buchstaben und Leerzeichen besteht order Leer oder Null ist
	 * @throw NachnameNotValidException Wenn der Nachahme nicht nur aus Buchstaben und Leerzeichen besteht order Leer oder Null ist
	 * @throw AdresseNotValidException Wenn Adressformatierung nicht korrekt ist order nicht Leer oder Null ist
	 * @throw EMailadresseNotValidException Wenn die Emailadressstruktur nicht korrekt ist order nicht Leer oder Null ist
	 * @pre	Des gesuchte Gast sollte regestriert sein da er sonst nicht gefunden werden kann
	 * @post Keine
	 */
	public int sucheGast(String anrede, String nameVor, String nameNach, String adresse, String email);
	
	/**
	 * Systemoperation: Kunden anlegen und ID des Kunden an das System zurueckliefern
	 * @param Anrede Die Anrede des Kunden (damit auch das Geschlecht)
	 * @param Vorname Der Vorname des Kunden
	 * @param Nachname Der Nachname des Kunden
	 * @param Adresse Die Adresse des Kunden
	 * @param Mailadresse Die EMailAdresse des Kunden
	 * @return Die Kunden ID
	 * @throw AnredeNotValidException Wenn Anrede etwas anderes ist als Herr oder Frau
	 * @throw VornameNotValidException Wenn der Fornahme nicht nur aus Buchstaben und Leerzeichen besteht
	 * @throw NachnameNotValidException Wenn der Nachahme nicht nur aus Buchstaben und Leerzeichen besteht
	 * @throw AdresseNotValidException Wenn Adressformatierung nicht korrekt ist 
	 * @throw EMailadresseNotValidException Wenn die Emailadressstruktur nicht korrekt ist
	 * @pre keine
	 * @post keine
	 * @return Kunden ID : immer positiv
	 */
	public int createKunde(String anrede, String nameVor, String nameNach, String adresse, String email);
	
	/**
	 * Systemoperation: Autovervollstaendigung. Beim markierung der Option Stammkunde in Verbindung mit
	 * einer von der GUI als vervollstaendigbar definierten Aktion, wird mit der ID des Kunden die Anrede ausgegeben 
	 * @param KundenID Die KundenId wird benoetigt, um die Anrede aus den Daten zu suchen
	 * @throw kundenIdNichtBekanntExeption Wenn eine KundenID uebergeben wird die nicht existiert
	 * @pre die ID des Kunden ist bekannt
	 * @post Die Anrede des Kunden ist gefunden
	 */
	public String getAnredeKunde(int KundenId);
	
	/**
	 * Systemoperation: Autovervollstaendigung. Beim markierung der Option Stammkunde in Verbindung mit
	 * einer von der GUI als vervollstaendigbar definierten Aktion, wird mit der ID des Kunden der Vorname ausgegeben 
	 * @param KundenID Die KundenId wird benoetigt, um die Anrede aus den Daten zu suchen
	 * @throw kundenIdNichtBekanntExeption Wenn eine KundenID uebergeben wird die nicht existiert
	 * @pre die ID des Kunden ist bekannt
	 * @post Der Vorname des Kunden ist gefunden
	 */
	public String getVornameKunde(int KundenId);
	
	/**
	 * Systemoperation: Autovervollstaendigung. Beim markierung der Option Stammkunde in Verbindung mit
	 * einer von der GUI als vervollstaendigbar definierten Aktion, wird mit der ID des Kunden der Nachname ausgegeben 
	 * @param KundenID Die KundenId wird benoetigt, um die Anrede aus den Daten zu suchen
	 * @throw kundenIdNichtBekanntExeption Wenn eine KundenID uebergeben wird die nicht existiert
	 * @pre die ID des Kunden ist bekannt
	 * @post Der Nachname des Kunden ist gefunden
	 */
	public String getNachnameKunde(int KundenId);
	
	/**
	 * Systemoperation: Autovervollstaendigung. Beim markierung der Option Stammkunde in Verbindung mit
	 * einer von der GUI als vervollstaendigbar definierten Aktion, wird mit der ID des Kunden die Adresse ausgegeben 
	 * @param KundenID Die KundenId wird benoetigt, um die Anrede aus den Daten zu suchen
	 * @throw kundenIdNichtBekanntExeption Wenn eine KundenID uebergeben wird die nicht existiert
	 * @pre Die Adresse des Kunden ist unbekannt und die ID des Kunden ist bekannt
	 * @post Die Adresse des Kunden ist gefunden
	 */	 
	public String getAdresseKunde(int KundenId);
	 
	/**
	 * Systemoperation: Autovervollstaendigung. Beim markierung der Option Stammkunde in Verbindung mit
	 * einer von der GUI als vervollstaendigbar definierten Aktion, wird mit der ID des Kunden die EmailAnrede ausgegeben
	 * @param KundenID Die KundenId wird benoetigt, um die Anrede aus den Daten zu suchen
	 * @throw kundenIdNichtBekanntExeption Wenn eine KundenID uebergeben wird die nicht existiert
	 * @pre die ID des Kunden ist bekannt
	 * @post Die E-Mail-Adresse des Kunden ist gefunden
	 */
	public String getEmailAdresseKunde(int KundenId);
}
